;;; any other solutions?
;;;
(defun p16 ()
  (defun p16-inner (k result)
	(if (= k 0)
	    result
		(p16-inner (truncate (/ k 10)) (+ result (mod k 10)))))
 (p16-inner (expt 2 1000) 0))

(defun digits (num)
  (map 'list
       (lambda (char) (read-from-string (string char)))
       (prin1-to-string num)))

(defun euler16 ()
  (reduce '+ (digits (expt 2 1000))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(format t "~a~%" (time (p16)))
(format t "~a~%" (time (euler16)))
